パターン演算子は、デレクトリからファイル名だけ取り出したり、ファイル名のサフィクスを取り除いたりするのに使用する。
変数の値の文字列の一部とパターンと照合するのに使用する。
パターンに使用できるものは、ワイルドカード
などを含む文字列も使うことができる。
パターン演算子 基本形
演算子 意味
${varname#pattern} varnameの値の最初の部分がpatternと一致した場合、最も短く一致する部分を削除し残りの部分を返す。 ${varname##pattern} varnameの値の最初の部分がpatternと一致した場合、最も長く一致する部分を削除し残りの部分を返す。 ${varname%pattern} varnameの値の終わりの部分がpatternと一致した場合、最も短く一致する部分を削除し残りの部分を返す。 ${varname%%pattern} varnameの値の終わりの部分がpatternと一致した場合、最も長く一致する部分を削除し残りの部分を返す。 ${varname/pattern/string}@ varnameの値でpatternと最も長く一致する部分を削除し残りの部分をstringと置換する。
@の書式では、最初に一致した部分だけが置換される。
Aの書式では、一致する部分はすべて置換される。
patternが#で始まる場合は、variableの始まりと一致しなくてはならない。
stringが、NULLの場合、一致した部分が削除される。
variableが@、*の場合位置パラメーターが順番に処理され、展開結果は、そのリストとなる。${varname//pattern/string}A ${#variable} 文字列で変数の長さを返す。
変数path=/export/home/spaceforce/fruit.tar.gzを使った結果
例)
式 結果 理由 $(path##/*/) fruit.tar.gz /*/のパターンがづくため最後だけ残す。 $(path#/*/) home/mmstts/fruit.tar.gz /*/はじめて見つけた/export/だけ削除。 $path
/export/home/spaceforce/fruit.tar.gz 全体を表示している。 $(path%.*) /export/home/spaceforce/fruit.tar 終わりから最初に見つけた.*を削除。 $(path%%.*) /export/home/spaceforce/fruit ドットが続くのでその部分だけ削除。 このようにワイルドカードが力を発揮する。
パターン照合と置換
例)
環境変数 PTAHから個別パスをスライスする。
echo -e ${PATH//:/'\n'}
-eは、エスケープシーケンス有効にする。-eです。
パスの区切る記号:と\nを置換して表示する。
長さを返す演算子
例)
ringo="ringo"
echo ${#ringo}
5 <- 文字